from flask import Flask
from settings import map_config



# 负责创建app对象
def create_app(config_type): # 根据参数的不同来选择配置对象
    app = Flask(__name__)

    # 根据config_type来获取当前 # 加载项目的配置
    app.config.from_object(map_config.get(config_type))

    # 初始化限制器
    from comment.utils.limiter import limiter as lmt
    lmt.init_app(app)


    # 加载日志处理的工具
    from comment.utils.logging import create_logger
    create_logger(app)

    # 初始化sqlalchemy
    from comment.models import db
    db.init_app(app)

    # 添加请求钩子 # 全局中添加
    from comment.utils.request_wares import jwt_request_authorization
    app.before_request(jwt_request_authorization) # 所有服务器的请求都生效

    # 初始化redis数据库的链接
    from comment.utils.shopping_redis import redis_client
    redis_client.init_app(app) # app用于加载配置


    # 加载模块的蓝图
    from Shopping.resources.user import user_bp
    from Shopping.resources.index import index_bp

    from Shopping.resources.goods import goods_bp
    from Shopping.resources.cart import cart_bp
    from Shopping.resources.address import address_bp
    from Shopping.resources.coupon import coupon_bp
    # from Shopping.resources.order import  # 这个南图不用加载没有配置
    app.register_blueprint(user_bp) # 加载蓝图
    app.register_blueprint(index_bp) # 加载商品的南图

    app.register_blueprint(goods_bp)
    app.register_blueprint(cart_bp)
    app.register_blueprint(address_bp)
    app.register_blueprint(coupon_bp)
    # app.register_blueprint()

    return app

